package ynu.edu.merchant.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import ynu.edu.merchant.entity.MerchantReview;

import java.math.BigDecimal;
import java.util.Optional;

/**
 * 商家评价Repository接口
 */
public interface MerchantReviewRepository extends JpaRepository<MerchantReview, Long> {

    /**
     * 根据商家ID查询评价列表
     *
     * @param merchantId 商家ID
     * @param status     状态
     * @param isDeleted  是否删除
     * @param pageable   分页参数
     * @return 评价列表
     */
    Page<MerchantReview> findByMerchantIdAndStatusAndIsDeleted(Long merchantId, Integer status, Integer isDeleted, Pageable pageable);

    /**
     * 根据用户ID查询评价列表
     *
     * @param userId    用户ID
     * @param isDeleted 是否删除
     * @param pageable  分页参数
     * @return 评价列表
     */
    Page<MerchantReview> findByUserIdAndIsDeleted(Long userId, Integer isDeleted, Pageable pageable);

    /**
     * 根据订单ID查询评价
     *
     * @param orderId 订单ID
     * @return 评价信息
     */
    Optional<MerchantReview> findByOrderId(Long orderId);

    /**
     * 计算商家的平均评分
     *
     * @param merchantId 商家ID
     * @param status     状态
     * @param isDeleted  是否删除
     * @return 平均评分
     */
    @Query("SELECT AVG(r.rating) FROM MerchantReview r WHERE r.merchantId = ?1 AND r.status = ?2 AND r.isDeleted = ?3")
    BigDecimal calculateAverageRating(Long merchantId, Integer status, Integer isDeleted);

    /**
     * 统计商家的评价数量
     *
     * @param merchantId 商家ID
     * @param status     状态
     * @param isDeleted  是否删除
     * @return 评价数量
     */
    long countByMerchantIdAndStatusAndIsDeleted(Long merchantId, Integer status, Integer isDeleted);
} 